package com.apimanage.monitor.service;

import com.apimanage.monitor.entity.ApiLog;
import com.apimanage.monitor.entity.ApiStatistics;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 监控服务接口
 * 提供API调用日志记录和统计功能
 */
public interface MonitorService {

    /**
     * 记录API调用日志
     * @param apiLog API调用日志
     * @return 操作结果
     */
    boolean recordApiLog(ApiLog apiLog);

    /**
     * 分页查询API调用日志
     * @param params 查询参数
     * @return API调用日志列表
     */
    List<ApiLog> getApiLogPage(Map<String, Object> params);

    /**
     * 根据API ID查询调用日志
     * @param apiId API ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return API调用日志列表
     */
    List<ApiLog> getApiLogByApiId(Long apiId, Date startTime, Date endTime);

    /**
     * 根据用户ID查询调用日志
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return API调用日志列表
     */
    List<ApiLog> getApiLogByUserId(Long userId, Date startTime, Date endTime);

    /**
     * 更新API调用统计
     * @param apiId API ID
     * @param status 调用状态：0-失败，1-成功
     * @param costTime 调用耗时（毫秒）
     */
    void updateApiStatistics(Long apiId, Integer status, Long costTime);

    /**
     * 分页查询API调用统计
     * @param params 查询参数
     * @return API调用统计列表
     */
    List<ApiStatistics> getApiStatisticsPage(Map<String, Object> params);

    /**
     * 根据API ID和日期范围查询统计
     * @param apiId API ID
     * @param startDate 开始日期（YYYY-MM-DD）
     * @param endDate 结束日期（YYYY-MM-DD）
     * @return API调用统计列表
     */
    List<ApiStatistics> getApiStatisticsByApiIdAndDateRange(Long apiId, String startDate, String endDate);

    /**
     * 获取API调用概览统计
     * @param apiIds API ID列表
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return API调用概览统计
     */
    Map<String, Object> getApiOverviewStatistics(List<Long> apiIds, String startDate, String endDate);

}